home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / text / hyper / ADtoHT2_0.lha / MyLib.lha / stdlib / bsearch.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-05  |  687 b   |  44 lines

  1. #include <stdlib.h>
  2.  
  3. /************************************************************************/
  4.  
  5. /* sample compar function: int cmp(void *a,void *b){ return *(int *)a-*(int *)b; } */
  6.  
  7. void *bsearch (const void *key,const void *base,size_t nmemb,size_t size, int (*compar)(const void *,const void *))
  8.  
  9. {
  10.   char *base2;
  11.   size_t a;
  12.   size_t b;
  13.   size_t c;
  14.   int d;
  15.  
  16.   base2=(char *)base;
  17.   a=0;
  18.   b=nmemb;
  19.   if (nmemb!=0)
  20.     {
  21.       while (1)
  22.     {
  23.       c=(a+b)/2;
  24.       if ((d=(*compar)(key,&base2[size*c]))==0)
  25.         {
  26.           return &base2[size*c];
  27.         }
  28.       if (c==a)
  29.         {
  30.           break;
  31.         }
  32.       if (d<0)
  33.         {
  34.           b=c;
  35.         }
  36.       else
  37.         {
  38.           a=c;
  39.         }
  40.     }
  41.     }
  42.   return NULL;
  43. }
  44.